package br.com.kapa.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.naming.InitialContext;

import br.com.kapa.dao.DaoClienteBeanRemote;
import br.com.kapa.dao.DaoMateriaPrimaBeanRemote;
import br.com.kapa.dao.DaoUnidadeBeanRemote;
import br.com.kapa.model.Cliente;
import br.com.kapa.model.MateriaPrima;
import br.com.kapa.model.Unidade;

public class Reportes {

	private InitialContext contexto;

	public Reportes() {
	}

	public InitialContext getContexto() {
		return contexto;
	}

	public void setContexto(InitialContext contexto) {
		this.contexto = contexto;
	}

	public String getReporteDeUnidades() {

		try {
			StringBuffer saida = new StringBuffer(getCabecalho("UNIDADES"));

			contexto = new InitialContext();
			DaoUnidadeBeanRemote unidades = (DaoUnidadeBeanRemote) contexto
					.lookup("bean/dao_unidade");

			String formato = "%-5s%-50s\n";

			for (Unidade unidade : unidades.findAll()) {
				saida.append(String.format(formato, unidade.getId(),
						unidade.getNome()));
			}

			return saida.toString();
		} catch (Exception e) {
			return "Sem registros";
		}
	}

	public String getReporteDeUsuarios() {
		StringBuffer saida = new StringBuffer(getCabecalho("CLIENTES"));

		try {
			contexto = new InitialContext();
			DaoClienteBeanRemote clientes = (DaoClienteBeanRemote) contexto
					.lookup("bean/dao_cliente");
			String formato = "%-12s%-25s%-20s%-25s\n";
			for (Cliente cliente : clientes.findAll()) {
				saida.append(String.format(formato, cliente.getCpfcnpj(),
						cliente.getNome(), cliente.getCelular(),
						cliente.getEmail()));
			}
			return saida.toString();

		} catch (Exception e) {
			saida.append("\n\nSem registros.\n\n"); 
			return saida.toString(); 
		}

	}

	public String getReporteDeMateriasPrimas() {
		StringBuffer saida = new StringBuffer(getCabecalho("MATERIAS PRIMAS"));

		try {
			contexto = new InitialContext();
			DaoMateriaPrimaBeanRemote mps = (DaoMateriaPrimaBeanRemote) contexto
					.lookup("bean/dao_materiaprima");
			String formato = "%-25s%-20s%-5s\n";
			for (MateriaPrima mp : mps.findAll()) {
				saida.append(String.format(formato, getDataFormatada(mp.getDataCadastro()), mp.getDescricao(), mp.getEstoque()));
			}
			
			return saida.toString();

		} catch (Exception e) {
			e.printStackTrace();
			saida.append("\n\nSem registros.\n\n");
			saida.append(e.getMessage() + "\n\n\n"); 
			return saida.toString(); 
		}

	}
	
	private String getCabecalho(String texto) {
		StringBuffer saida = new StringBuffer("\n");
		StringBuffer linha = new StringBuffer("");

		for (int i = 0; i < texto.length()+ 4; i++) {
			linha.append("-");
		}

		saida.append(linha.toString() + "\n");
		saida.append("  " + texto + "\n");
		saida.append(linha.toString() + "\n");
		saida.append("\n");

		return saida.toString();

	}
	
	private String getDataFormatada(Calendar data) {
		
		SimpleDateFormat formatador = new SimpleDateFormat("dd-MM-yyyy");  
		String formatoDeDataCustomizado = formatador.format(data.getTime());
		return formatoDeDataCustomizado;
	}
}
